#include "minishell.h"
void mi_ls(char **parametros, int numero_parametro)
{
    DIR *dir=NULL;
    struct dirent *mi_dirent=NULL;
    if (numero_parametro == 0) listar_directorio_actual(dir,mi_dirent);

    else if(numero_parametro == 1)
    {
        if (strcmp(parametros[0],"-l")==0) listar_directorio_con_parametro_l(".",dir,mi_dirent);
        else listar_directorio(parametros[0],dir,mi_dirent);
    }
}

void listar_directorio(char *path, DIR *dir, struct dirent *mi_dirent)
{
    dir = opendir(path);
    if (dir == NULL)
    {
        perror ("Error al ejecutar el comando 'ls' \n");
    }

    while((mi_dirent = readdir(dir)) != NULL)
        printf("%s\n",mi_dirent->d_name);

    printf("\n");

    closedir(dir);
}

void listar_directorio_actual(DIR *dir, struct dirent *mi_dirent)
{
    char path[255];
    getcwd(path,300);

    dir = opendir(path);
    if (dir == NULL)
    {
        perror ("Error al ejecutar el comando 'ls' \n");
    }

    while((mi_dirent = readdir(dir)) != NULL)
        printf("%s\t",mi_dirent->d_name);

    closedir(dir);
}

void listar_directorio_con_parametro_l(char *path, DIR *dir, struct dirent *mi_dirent)
{
    char fichero[300];
    struct stat buf;
    int fildes;
    dir = opendir(path);

    if (dir == NULL)
    {
        perror ("Error al ejecutar el comando 'ls' \n");
    }

    printf("st_mode      st_uid      st_gid      st_size          d_name\n ");
    printf("---------------------------------------------------------------\n");

    while((mi_dirent = readdir(dir)) != NULL)
    {
        sprintf(fichero,"%s/%s",path,mi_dirent->d_name);
        fildes = open("fichero", O_RDWR);
        fstat(fildes, &buf);
        printf("%d      %d      %d      %d          %s\n",buf.st_mode,buf.st_uid,buf.st_size,buf.st_gid,mi_dirent->d_name);
    }

    printf("----------------------------------------------------------------\n");

    closedir(dir);

}


